const bodyParser = require('body-parser')
let {
  userList,
  list,
} = require('./mock')
const JWT = require('jsonwebtoken')

function strToDateToNumber(str) {
  return new Date(str).getTime()
}

module.exports = app => {
  // 启动中间件
  app.use(bodyParser.json())

  // 登录接口
  app.post('/api/login', (req, res) => {
    // 1. 获取用户名和密码
    const {
      username,
      password
    } = req.body;
    // 2. 验证数据是否存在
    const user = userList.find(v => {
      return (v.tel === username && v.password === password) ||
        (v.email === username && v.password === password)
    });
    // 3. 根据验证结果
    if (user) {
      res.send({
        code: 200,
        message: '登录成功， 欢迎' + user.nickname + '~',
        data: {
          id: user.id,
          tel: user.tel,
          email: user.email,
          avator: user.avator,
          nickname: user.nickname,
          // 用户权限
          role: user.role,
          token: JWT.sign({
            id: user.id,
            tel: user.tel,
            email: user.email,
            avator: user.avator,
            nickname: user.nickname,
            // 用户权限
            role: user.role,
          }, '666666666')
        }
      })
    } else {
      res.send({
        code: 400,
        message: '账户密码错误， 请重新输入～'
      })
    }
  })

  // 列表获取接口
  app.get('/api/list', (req, res) => {
    let copyList = [...list];
    // 获取查询参数
    const { value, type, start, end } = req.query;
    // 1. 是否模糊搜索
    if(value) {
      copyList = copyList.filter(v => {
        return JSON.stringify(v).includes(value)
      })
    }
    // 2. 是否类型搜索
    if(type && type !== '全部') {
      copyList = copyList.filter(v => {
        return v.type === type
      })
    }
    // 3. 是否区间查找
    if(start && end) {
      copyList = copyList.filter(v => {
        const a = strToDateToNumber(v.createDateTime);
        const b = strToDateToNumber(start)
        const c = strToDateToNumber(end)
        return a > b && a < c
      })
    }

    res.send({
      code: 200,
      data: copyList
    })
  })

  // 列表删除接口
  app.delete('/api/list/:id', (req, res) => {
    // 1. 获取后端动态路由ID
    const {
      id
    } = req.params
    // 2. 通过 id 找到 索引 进行删除
    const index = list.findIndex(v => v.id === id);
    const [item] = list.splice(index, 1);
    // 3. 
    res.send({
      code: 200,
      message: '删除成功',
      data: item
    })
  })

  // 列表选中删除接口
  app.delete('/api/list/:id/selected', (req, res) => {
    // id：格式： 123435
    // id: 格式: 123,456,789
    // 1. 获取删除的id
    const {
      id
    } = req.params;
    // 2. id 之间 , 分割转化为数组
    const ids = id.split(','); // => [123,456,789]
    // 3. 筛选删除
    list = list.filter(v => !ids.includes(v.id));
    // 4. 返回结果
    res.send({
      code: 200,
      message: '删除成功',
      // data: item
    })
  })


  // 新增接口
  app.post('/api/list', (req, res) => {
    const {
      item
    } = req.body;
    list.unshift(item);
    res.send({
      code: 200,
      message: '添加成功'
    })
  })

  // 编辑接口
  app.post('/api/list/:id', (req, res) => {
    const {
      id
    } = req.params
    const {
      item
    } = req.body;
    const localItem = list.find(v => v.id === id);
    Object.assign(localItem, item);
    res.send({
      code: 200,
      message: '修改成功'
    })
  })

  // 图标接口--词典类型--柱状图
  app.get('/api/list/type/echarts', (req, res) => {
    const oo = list.reduce((p, n) => {
      p[n.type]++;
      return p
    }, {
      "英汉词典": 0,
      "汉英词典": 0,
      "汉字词典": 0,
      "新华词典": 0
    })
    res.send({
      code: 200,
      data: {
        title: {
          text: "词典类型柱状图",
        },
        tooltip: {},
        xAxis: {
          data: Object.keys(oo),
        },
        yAxis: {},
        series: [{
          name: "销量",
          type: "bar",
          data: Object.values(oo),
        }],
      }
    })
  })
}